/*
 * ParserDocumento.cpp
 *
 *  Created on: 21/05/2013
 *      Author: jonathan
 */

#include "ParserDocumento.h"
#include "../commons/excepciones/NoExisteArchivoException.h"

ParserDocumento::ParserDocumento(const FileName documento) {
	// Abro el archivo
	this->documento.open(documento, ios::in);
	// valido que se haya abierto correctamente.
	if (!this->documento.good())
		throw NoExisteArchivoException(documento);
	this->pos_actual = 0;
}

ParserDocumento::~ParserDocumento() {
	if (this->documento.good())
		this->documento.close();
}

bool ParserDocumento::hasNext() {
	char letra = 0;
	EnteroLargo tempo;
	bool finPalabra = true;
	string palabra = "";
	string caracteres =
			"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	if (!(this->documento >> std::noskipws >> letra))
		return false;
	do {
		letra=tolower(letra);
		tempo = caracteres.find(letra, 0);

		if (tempo == std::string::npos) {
			finPalabra = false;
		} else {
			palabra.append(1, letra);
		}
	} while (finPalabra && (this->documento >> std::noskipws >> letra));
	if (palabra.length() == 0) {
		return this->hasNext();
	} else {
		this->pos_actual++;
		this->palabraTemp=palabra;
		return true;
	}
}

const Parseado ParserDocumento::next() {
	Parseado p(this->palabraTemp,this->pos_actual-1);
	return p;
}
